package com.zwj.rms.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zwj.rms.bo.DeptBo;
import com.zwj.rms.dto.SysDept;
import com.zwj.rms.entity.SysDeptEntity;
import com.zwj.rms.enums.IsDeletedEnum;
import com.zwj.rms.enums.StatusEnum;
import com.zwj.rms.mapper.SysDeptMapper;
import com.zwj.rms.service.SysDeptService;
import com.zwj.rms.utils.DataCheckUtils;
import com.zwj.rms.utils.DateUtils;
import com.zwj.rms.utils.TreeUtils;
import com.zwj.rms.vo.Result;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 * 部门表 服务实现类
 * </p>
 *
 * @author zwj
 * @since 2021-09-14
 */
@Service
public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDeptEntity> implements SysDeptService {
    private final SysDeptMapper sysDeptMapper;

    public SysDeptServiceImpl(SysDeptMapper sysDeptMapper) {
        this.sysDeptMapper = sysDeptMapper;
    }
    @Override
    public Result selectDept(DeptBo deptBo) {
        //查询项目组评分 mybatis
        List<SysDept> result = sysDeptMapper.selectRole(deptBo);
        if (result.size() == 0) return Result.error().message("查询结果为空");
        return Result.ok().data(TreeUtils.createDeptTree(result,0));
    }

    @Override
    public Result updateDeptStatus(DeptBo deptBo) {
        //数据校验
        DataCheckUtils.isNotBlank(deptBo.getId(), "部门Id不能为空!");
        DataCheckUtils.isNotBlank(deptBo.getStatus(), "部门状态不能为空!");
        DataCheckUtils.isValid(StatusEnum.getEnumValue(deptBo.getStatus()) != null, "部门状态不存在");
        QueryWrapper<SysDeptEntity> sectionQueryWrapper = new QueryWrapper<>();
        sectionQueryWrapper.lambda().eq(SysDeptEntity::getId, deptBo.getId()).eq(SysDeptEntity::getIsDeleted, IsDeletedEnum.NO.getKey());
        SysDeptEntity role = sysDeptMapper.selectOne(sectionQueryWrapper);
        //查询结果校验
        if (role == null) {
            return Result.error().message("部门不存在！");
        }
        if (deptBo.equals(role.getStatus())) {
            return Result.error().message("部门状态不匹配不能修改");
        }
        SysDeptEntity updateStatus = new SysDeptEntity();
        updateStatus.setStatus(deptBo.getStatus());
        UpdateWrapper<SysDeptEntity> updateWrapper = new UpdateWrapper<>();
        updateWrapper.lambda().eq(SysDeptEntity::getId, deptBo.getId());
        int row = sysDeptMapper.update(updateStatus, updateWrapper);
        //判断修改结果
        if (row == 0) {
            return Result.error().message("编辑部门状态失败");
        }
        return Result.ok();
    }

    @Override
    public Result deleteDept(DeptBo deptBo) {
        DataCheckUtils.isNotBlank(deptBo.getId(), "部门id不能为空!");
        QueryWrapper<SysDeptEntity> sectionQueryWrapper = new QueryWrapper<>();
        sectionQueryWrapper.lambda().eq(SysDeptEntity::getId, deptBo.getId()).eq(SysDeptEntity::getIsDeleted, IsDeletedEnum.NO.getKey());
        SysDeptEntity role = sysDeptMapper.selectOne(sectionQueryWrapper);
        //查询结果校验
        if (role == null) {
            return Result.error().message("角色不存在！");
        }
        SysDeptEntity sysDeptEntity = new SysDeptEntity();
        sysDeptEntity.setIsDeleted(IsDeletedEnum.YES.getKey());
        UpdateWrapper<SysDeptEntity> updateWrapper = new UpdateWrapper<>();
        updateWrapper.lambda().eq(SysDeptEntity::getId, deptBo.getId()).eq(SysDeptEntity::getIsDeleted,IsDeletedEnum.NO.getKey());
        int row = sysDeptMapper.update(sysDeptEntity, updateWrapper);
        //判断修改结果
        if (row == 0) {
            return Result.error().message("删除部门失败");
        }
        return Result.ok();
    }

    @Override
    public Result addDept(SysDeptEntity sysDeptEntity) {
        //数据校验
        //查询指定工号、身份证号、手机号是否重复
        //插入数据
        sysDeptEntity.setIsDeleted("0");
        sysDeptEntity.setCreateBy("1");
        sysDeptEntity.setCreateTime(DateUtils.getCurrentTime());
        int row = sysDeptMapper.insert(sysDeptEntity);
        //判断插入结果
        if (row == 0) {
            return Result.error().message("添加部门失败");
        }
        return Result.ok();
    }

    @Override
    public Result updateDept(SysDeptEntity sysDeptEntity) {
        UpdateWrapper<SysDeptEntity> updateWrapper = new UpdateWrapper<>();
        updateWrapper.lambda().eq(SysDeptEntity::getId, sysDeptEntity.getId());
        int row = sysDeptMapper.update(sysDeptEntity, updateWrapper);
        //判断修改结果
        if (row == 0) {
            return Result.error().message("编辑部门信息失败");
        }
        return Result.ok();
    }
}
